home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / Python 1.3.3 / stdwin / Ports / mac / dprintf.c < prev    next >
Text File  |  1995-12-21  |  2KB  |  89 lines

  1. /* A simple debugging routine, assuming you've got QuickDraw,
  2.    windows and menus running.
  3.    It can be called with up to 10 printf arguments.
  4.  
  5.    It beeps, draws a message over the menu bar,
  6.    and waits for a key or mouse down event.
  7.    If Command-Period is detected, it calls ExitToShell,
  8.    to allow an emergency exit from a looping program.
  9.  
  10.    Warning: there are some side effects on the window manager's port,
  11.    such as pen parameters and clipping.
  12.    The printed string shouldn't exceed 255 chars.
  13. */
  14.  
  15. #include "macwin.h"
  16. #include <stdarg.h>
  17. #include <Menus.h>
  18. #include <OSUtils.h>
  19. #include <SegLoad.h>
  20.  
  21. void
  22. dprintf(char *fmt, ...)
  23. {
  24.     char buf[256];
  25.     GrafPtr saveport;
  26.     GrafPtr screen;
  27.     Rect r;
  28.     va_list p;
  29.     
  30.     SysBeep(2);
  31.     va_start(p, fmt);
  32.     vsprintf(buf, fmt, p);
  33.     va_end(p);
  34.     GetPort(&saveport);
  35.     GetWMgrPort(&screen);
  36.     SetPort(screen);
  37.     r= screen->portRect;
  38.     r.bottom= 19; /* Height of menu bar, less border line */
  39.     ClipRect(&r);
  40.     PenNormal();
  41.     /* Reset more parameters, such as text font? */
  42.     EraseRect(&r);
  43.     MoveTo(5, 15); /* Left margin and base line */
  44. #ifndef CLEVERGLUE
  45.     CtoPstr(buf);
  46. #endif
  47.     DrawString((ConstStr255Param)buf);
  48.     
  49.     /* Wait for mouse or key down event.
  50.        Include auto key events so a flood of dprintf
  51.        calls can be skipped quickly by holding a key. */
  52.     for (;;) {
  53.         EventRecord e;
  54.         
  55.         if (GetNextEvent(keyDownMask|autoKeyMask|mDownMask, &e)) {
  56.             if (e.what == keyDown &&
  57.                 (e.message & charCodeMask) == '.' &&
  58.                 (e.modifiers & cmdKey))
  59.                 ExitToShell();
  60.             if ((e.what == keyDown || e.what == autoKey) &&
  61.                 ((e.message & charCodeMask) == '\r' ||
  62.                  (e.message & charCodeMask) == '\3')
  63.                 || e.what == mouseDown)
  64.                 break;
  65.         }
  66.     }
  67.     
  68.     /* Restore the situation, more or less. */
  69.     SetPort(saveport);
  70.     DrawMenuBar();
  71. }
  72.  
  73. #ifdef UNUSED
  74.  
  75. /* Print the extent of the stack. */
  76.  
  77. #define CurStackBase    (* (long*)0x908)
  78. #define ApplZone    (* (long*)0x2AA)
  79. #define ApplLimit    (* (long*)0x130)
  80.  
  81. prstack(where)
  82.     char *where;
  83. {
  84.     dprintf("ApplZone=%d, ApplLimit=%d, CurStackBase=%d, SP=%d",
  85.         ApplZone, ApplLimit, CurStackBase, &where);
  86. }
  87.  
  88. #endif /*UNUSED*/
  89.